package es.ucm.fdi.bdt.controller.interfaces.management;

/**
 * Gestión de préstamos
 */
public interface ILendingManager {

	/**
	 * Funci�n: Hacer pr�stamo.
		ID: Pre01
		Prioridad: Baja.
		Estabilidad: Media.
		Descripci�n: Permitir realizar un pr�stamo de horas entre usuarios del sistema.
		Entrada: Informaci�n del usuario que realiza el pr�stamo, informaci�n del usuario que recibe el pr�stamo (ID de usuario, firma digital), horas.
		Salida: Mensaje de confirmaci�n de pr�stamo realizado.
		Origen: Interfaz gr�fica.
		Destino: Sistema.
		Necesita: Estar conectado a la red, el archivo/s de usuarios del sistema cuentas.txt, el archivo/s que guarda la informaci�n bancaria de usuarios bancario.txt, claves p�blicas guardadas en cuentas.txt.
		Acci�n: Pr�stamo a un usuario.
		Precondici�n: Que los dos usuarios existan en el sistema. Que el n�mero de horas a prestar no sea superior al cr�dito del usuario que presta.
		Postcondici�n: Disminuye el cr�dito del usuario que realiza el pr�stamo mientras que aumenta el cr�dito del usuario que recibe el pr�stamo en el archivo de cuentas de usuarios. Una deuda del usuario receptor hacia el usuario emisor.
	 * @param datosPrestamo
	 * @return
	 */
	Object hacerPrestamo(Object datosPrestamo);
	

	/**
	 * 
		Funci�n: Solicitar pr�stamo.
		ID: Pre02
		Prioridad: Baja.
		Estabilidad: Media.
		Descripci�n: Permitir solicitar un pr�stamo de horas entre usuarios del sistema.
		Entrada: Informaci�n del usuario que realiza el pr�stamo, informaci�n del usuario que recibe el pr�stamo (ID de usuario, firma digital), horas.
		Salida: Mensaje de confirmaci�n de pr�stamo solicitado.
		Origen: Interfaz gr�fica.
		Destino: Sistema.
		Necesita: Estar conectado a la red, el archivo/s de usuarios del sistema cuentas.txt, el archivo/s que guarda la informaci�n bancaria de usuarios bancario.txt, claves p�blicas guardadas en cuentas.txt.
		Acci�n: Solicita un pr�stamo a un usuario.
		Precondici�n: Que los dos usuarios existan en el sistema. Que el n�mero de horas a prestar no sea superior al cr�dito del usuario que presta.
		Postcondici�n: Disminuye el cr�dito del usuario que realiza el pr�stamo mientras que aumenta el cr�dito del usuario que recibe el pr�stamo en el archivo de cuentas de usuarios. Una deuda del usuario receptor hacia el usuario emisor.
	 * @param datosPrestamo
	 * @return
	 */
	Object solicitarPrestamo(Object datosPrestamo);
	
}
